package gui;

import javax.swing.JComponent;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import scala.swing.BorderPanel;

/**
 * Die TabChangeListener-Klasse ist ein Listener, 
 * der beim Wechsel eines Tabs aufgerufen wird.
 * 
 * Je nach anschliessend aktivem Tab werden Menue-
 * sowie Toolbar-Eintraege aktiv bzw. inaktiv gesetzt.
 */

public class TabChangeListener implements ChangeListener {
    
    private TabbedPaneClosable pane;
    private Layout tt;
    
    public TabChangeListener(TabbedPaneClosable pane, Layout tt) {
        this.pane = pane;
        this.tt = tt;
    }

    public void stateChanged(ChangeEvent e) {
        //TabbedPaneClosable epane = (TabbedPaneClosable)e.getSource();
        int sel = pane.getSelectedIndex();
         
        if(pane != null && tt.tabstop().peer().getTabCount() > 0) {
            pane.setSelectedIndex(sel);
        
            JComponent c = (JComponent)pane.peer().getSelectedComponent();
            
            ScaProject tp = tt.getActivProject();
            String[] fname = new String[2];
            fname[0] = "";
            fname[1] = "";
            if(tp != null)
                if(tp.maindatei() != null)
                    fname = tp.maindatei().getName().toLowerCase().split("_");
            //Wenn auf den Starttab gewechselt wird, Speichern sowie Parsen deaktivieren
            if(BorderPanel.wrap(c).equals(Layout.startuptab()) || tp == null) {
                tt.menuBar().enableItem(false, 1, 4);
                tt.menuBar().enableItem(false, 1, 5);
                tt.menuBar().enableItem(false, 1, 6);
                tt.menuBar().enableItem(false, 3, 1);
                tt.menuBar().enableItem(false, 3, 2);
                tt.menuBar().enableItem(false, 3, 3);
                tt.menuBar().enableItem(false, 3, 4);
                tt.menuBar().enableItem(false, 3, 6);
                tt.menuBar().enableItem(false, 3, 8);
                tt.menuBar().enableItem(false, 3, 10);
                tt.menuBar().enableItem(false, 3, 11);
                tt.menuBar().enableItem(false, 1, 8);
                tt.toolbar().enabled(2, false);
                tt.toolbar().enabled(4, false);
                tt.toolbar().enabled(5, false);
                tt.toolbar().enabled(6, false);
                tt.toolbar().enabled(7, false);
                tt.toolbar().enabled(9, false);
            } else if (fname[0].equals("checks") || fname[0].equals("test") ||
                    fname[0].equals("out") || fname[0].equals("prop") ||
                    fname[0].equals("trace") || fname[0].equals("proof")){
                tt.menuBar().enableItem(true, 1, 4);
                tt.menuBar().enableItem(true, 1, 5);
                tt.menuBar().enableItem(true, 1, 6);
                tt.menuBar().enableItem(false, 3, 1);
                tt.menuBar().enableItem(false, 3, 2);
                tt.menuBar().enableItem(false, 3, 3);
                tt.menuBar().enableItem(false, 3, 4);
                tt.menuBar().enableItem(false, 3, 6);
                tt.menuBar().enableItem(false, 3, 8);
                tt.menuBar().enableItem(false, 3, 10);
                tt.menuBar().enableItem(false, 3, 11);
                tt.menuBar().enableItem(true, 1, 8);
                tt.toolbar().enabled(2, true);
                tt.toolbar().enabled(4, false);
                tt.toolbar().enabled(5, false);
                tt.toolbar().enabled(6, false);
                tt.toolbar().enabled(7, false);
                tt.toolbar().enabled(9, true);
            } else {
                tt.menuBar().enableItem(true, 1, 4);
                tt.menuBar().enableItem(true, 1, 5);
                tt.menuBar().enableItem(true, 1, 6);
                tt.menuBar().enableItem(true, 3, 1);
                tt.menuBar().enableItem(true, 3, 2);
                tt.menuBar().enableItem(true, 3, 3);
                tt.menuBar().enableItem(true, 3, 4);
                tt.menuBar().enableItem(true, 3, 6);
                tt.menuBar().enableItem(true, 3, 8);
                tt.menuBar().enableItem(true, 3, 10);
                tt.menuBar().enableItem(true, 3, 11);
                tt.menuBar().enableItem(true, 1, 8);
                tt.toolbar().enabled(2, true);
                tt.toolbar().enabled(4, true);
                tt.toolbar().enabled(5, true);
                tt.toolbar().enabled(6, true);
                tt.toolbar().enabled(7, true);
                tt.toolbar().enabled(9, true);
                
            }
        }
        
        //Wenn auf ein Projekt gewechselt wird
        if(tt.getActivProject() != null) {
            tt.tabsbot().tabsDesc()[0].setText(tt.getActivProject().t1file());
            tt.tabsbot().tabsDesc()[1].setText(tt.getActivProject().t2file());
            tt.tabsbot().tabsDesc()[2].setText(tt.getActivProject().t3file());
            tt.tabsbot().tabsDesc()[3].setText(tt.getActivProject().t4file());
            tt.getActivProject().showProject(tt.tabsbot_pane1().textarea(),
                    tt.tabsbot_pane2().textarea(), tt.tabsbot_pane3().textarea(),
                    tt.tabsbot_pane4().textarea());
        }
        else {
            tt.tabsbot().tabsDesc()[0].setText("");
            tt.tabsbot().tabsDesc()[1].setText("");
            tt.tabsbot().tabsDesc()[2].setText("");
            tt.tabsbot().tabsDesc()[3].setText("");
            tt.tabsbot_pane1().textarea().peer().setText("");
            tt.tabsbot_pane2().textarea().peer().setText("");
            tt.tabsbot_pane3().textarea().peer().setText("");
            tt.tabsbot_pane4().textarea().peer().setText("");
        }
        
    }
    
}



 